﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Transactions;
using SMA.GENTEv1.Dados;

namespace SMA.GENTEv1
{
    public class FrotaModelo
    {
        #region Variaveis Membro
        private int _idFrotaModelo;
        private FrotaFabricante _fabricante;
        private string _descricao;
        private FrotaModeloClassificacao _classificacao;
        private List<CategoriaCNH> _categoriaCNH;
        private DataTable gradeVeiculos;
        private List<FrotaRegraContrato> _regraContrato;
        private GENTEEntities _context;
        #endregion

        #region Parametros
        public int IdFrotaModelo
        {
            get { return _idFrotaModelo; }
            set { _idFrotaModelo = value; }
        }

        public FrotaFabricante Fabricante
        {
            get { return _fabricante; }
            set { _fabricante = value; }
        }

        public string Descricao
        {
            get { return _descricao; }
            set { _descricao = value; }
        }

        public List<CategoriaCNH> CategoriaCNH
        {
            get { return _categoriaCNH; }
            set { _categoriaCNH = value; }
        }

        public FrotaModeloClassificacao Classificacao
        {
            get { return _classificacao; }
            set { _classificacao = value; }
        }

        public List<FrotaRegraContrato> RegraContrato
        {
            get { return _regraContrato; }
            set { _regraContrato = value; }
        }
        #endregion

        #region Construtores
        public FrotaModelo()
        {
            _context = new GENTEEntities();
        }

        public FrotaModelo(int _idmodelo, bool _carregaDados)
        {
            try
            {
                _context = new GENTEEntities();
                if (!_carregaDados)
                    this._idFrotaModelo = _idmodelo;
                else
                    Carregar(_idmodelo);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public FrotaModelo(int _idmodelo, bool _carregaDados, bool _carregaFabricante)
        {
            try
            {
                _context = new GENTEEntities();
                if (!_carregaDados)
                    this._idFrotaModelo = _idmodelo;
                else
                    Carregar(_idmodelo, _carregaFabricante);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public FrotaModelo(int _idmodelo, bool _carregaDados, bool _carregaFabricante, bool _carregaClassificacao, bool _carregaCategoriaCNH)
        {
            try
            {
                _context = new GENTEEntities();
                if (!_carregaDados)
                    this._idFrotaModelo = _idmodelo;
                else
                    Carregar(_idmodelo, _carregaFabricante, _carregaClassificacao, _carregaCategoriaCNH);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Métodos Privados
        private static Expression<Func<TElement, bool>> BuildContainsExpression<TElement, TValue>(Expression<Func<TElement, TValue>> valueSelector, IEnumerable<TValue> values)
        {
            if (null == valueSelector)
            {
                throw new
                    ArgumentNullException("valueSelector");
            }
            if (null == values) { throw new ArgumentNullException("values"); }

            ParameterExpression p = valueSelector.Parameters.Single();
            if (!values.Any())
            {
                return e => false;
            }

            var equals = values.Select(value =>
            (Expression)Expression.Equal(valueSelector.Body, Expression.Constant(value,
            typeof(TValue))));
            var body = equals.Aggregate<Expression>((accumulate, equal) =>
            Expression.Or(accumulate, equal));
            return Expression.Lambda<Func<TElement, bool>>(body, p);
        }

        private void EstruturaExibirGradeVeiculos()
        {
            DataColumn idfrotamodelo = new DataColumn();
            idfrotamodelo.ColumnName = "IdFrotaModelo";
            idfrotamodelo.DataType = Type.GetType("System.Int32");
            gradeVeiculos.Columns.Add(idfrotamodelo);

            DataColumn fabricante = new DataColumn();
            fabricante.ColumnName = "Fabricante";
            fabricante.DataType = Type.GetType("System.String");
            fabricante.Caption = "Fabricante";
            gradeVeiculos.Columns.Add(fabricante);

            DataColumn veiculo = new DataColumn();
            veiculo.ColumnName = "Veiculo";
            veiculo.DataType = Type.GetType("System.String");
            veiculo.Caption = "Veículo";
            gradeVeiculos.Columns.Add(veiculo);

            DataColumn classificacao = new DataColumn();
            classificacao.ColumnName = "Classificacao";
            classificacao.DataType = Type.GetType("System.String");
            classificacao.Caption = "Classificação";
            gradeVeiculos.Columns.Add(classificacao);

            DataColumn categorias = new DataColumn();
            categorias.ColumnName = "Categorias";
            categorias.DataType = Type.GetType("System.String");
            categorias.Caption = "Categorias";
            gradeVeiculos.Columns.Add(categorias);
        }

        private void Carregar(int _idmodelo)
        {
            try
            {
                var consulta = (from modelo in _context.tab_frota_modelo
                                where modelo.id_frota_modelo == _idmodelo
                                select new
                                {
                                    modelo.id_frota_modelo,
                                    modelo.descricao
                                });

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    this._idFrotaModelo = list.id_frota_modelo;
                    this._descricao = list.descricao;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private void Carregar(int _idmodelo, bool _carregaFabricante)
        {
            try
            {
                var consulta = (from modelo in _context.tab_frota_modelo
                                where modelo.id_frota_modelo == _idmodelo
                                select new
                                {
                                    modelo.id_frota_modelo,
                                    modelo.tab_frota_fabricante.id_frota_fabricante,
                                    modelo.descricao
                                });

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    this._idFrotaModelo = list.id_frota_modelo;
                    this._fabricante = new FrotaFabricante(list.id_frota_fabricante, _carregaFabricante);
                    this._descricao = list.descricao;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private void Carregar(int _idmodelo, bool _carregaFabricante, bool _carregaClassificacao, bool _carregaCategoriaCNH)
        {
            try
            {
                var consulta = (from modelo in _context.tab_frota_modelo
                                where modelo.id_frota_modelo == _idmodelo
                                select new
                                {
                                    modelo.id_frota_modelo,
                                    modelo.tab_frota_fabricante.id_frota_fabricante,
                                    modelo.descricao,
                                    modelo.tab_frota_modelo_classificacao.id_frota_modelo_classificacao
                                });

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    this._idFrotaModelo = list.id_frota_modelo;
                    this._fabricante = new FrotaFabricante(list.id_frota_fabricante, _carregaFabricante);
                    this._descricao = list.descricao;
                    this._classificacao = new FrotaModeloClassificacao(list.id_frota_modelo_classificacao, _carregaClassificacao);

                    if (_carregaCategoriaCNH)
                    {
                        CategoriaCNH categoria = new CategoriaCNH();
                        this._categoriaCNH = categoria.SelectVeiculoCNH(list.id_frota_modelo);

                        if (this._categoriaCNH.Count == 0)
                            this._categoriaCNH = categoria.SelectClassificacaoCNH(list.id_frota_modelo_classificacao);
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private int RetornaIdModelo()
        {
            try
            {
                int idmodelo = 0;

                var consulta = (from modelo in _context.tab_frota_modelo
                                orderby modelo.id_frota_modelo descending
                                select new
                                {
                                    modelo.id_frota_modelo
                                }).Take(1);

                foreach (var list in consulta.ToList())
                {
                    idmodelo = list.id_frota_modelo;
                }

                return idmodelo;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private void SalvarModeloCategorias()
        {
            for (int i = 0; i < this._categoriaCNH.Count; i++)
            {
                tab_frota_modelo_categoria_cnh tabModeloCategoriaCNH = new tab_frota_modelo_categoria_cnh();
                tabModeloCategoriaCNH.tab_frota_modeloReference.EntityKey = new EntityKey("GENTEEntities.tab_frota_modelo", "id_frota_modelo", this._idFrotaModelo);
                tabModeloCategoriaCNH.tab_categoria_cnhReference.EntityKey = new EntityKey("GENTEEntities.tab_categoria_cnh", "id_categoria_cnh", this._categoriaCNH[i].IdCategoriaCNH);

                _context.AddTotab_frota_modelo_categoria_cnh(tabModeloCategoriaCNH);
                _context.SaveChanges();
            }
        }

        private void ExcluirModeloCategorias()
        {
            var consulta = (from modelocategoriaCNH in _context.tab_frota_modelo_categoria_cnh
                            where modelocategoriaCNH.tab_frota_modelo.id_frota_modelo == this._idFrotaModelo
                            select modelocategoriaCNH);

            var listConsulta = consulta.ToList();

            foreach (var list in listConsulta)
            {
                _context.DeleteObject(list);
                _context.SaveChanges();
            }
        }

        private bool VerificaCadastro()
        {
            try
            {
                bool verifica = false;

                if (this._fabricante == null)
                    throw new Exception("É necessário informar o fabricante!");

                if (this._fabricante.IdFrotaFabricante == 0)
                    throw new Exception("É necessário informar o fabricante!");

                if (this._classificacao == null)
                    throw new Exception("É necessário informar a classificação!");

                if (this._classificacao.IdFrotaModeloClassificacao == 0)
                    throw new Exception("É necessário informar a classificação!");

                if (this._descricao == string.Empty)
                    throw new Exception("É necessário informar o véiculo!");

                if (this._categoriaCNH == null)
                    throw new Exception("É necessário informar ao menos uma categoria de CNH!");

                if (this._categoriaCNH.Count == 0)
                    throw new Exception("É necessário informar ao menos uma categoria de CNH!");

                if (this._idFrotaModelo == 0)
                {
                    var consulta = (from modelo in _context.tab_frota_modelo
                                    where modelo.tab_frota_fabricante.id_frota_fabricante == this._fabricante.IdFrotaFabricante
                                    && modelo.tab_frota_modelo_classificacao.id_frota_modelo_classificacao == this._classificacao.IdFrotaModeloClassificacao
                                    && modelo.descricao == this._descricao
                                    select new
                                    {
                                        modelo.id_frota_modelo
                                    });

                    var listConsulta = consulta.ToList();

                    if (consulta.ToList().Count > 0)
                        throw new Exception("Foi encontrado um veículo com os dados informados. Operação cancelada!");
                }

                verifica = true;
                return verifica;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Métodos Públicos

        #region Métodos de Seleção
        public List<FrotaModelo> SelectModelos(int _idfabricante)
        {
            try
            {
                List<FrotaModelo> listModelo = new List<FrotaModelo>();

                var consulta = (from modelo in _context.tab_frota_modelo
                                where modelo.tab_frota_fabricante.id_frota_fabricante == _idfabricante
                                select new
                                {
                                    modelo.id_frota_modelo,
                                    modelo.descricao
                                });

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    FrotaModelo modelo = new FrotaModelo();
                    modelo.IdFrotaModelo = list.id_frota_modelo;
                    modelo.Descricao = list.descricao;

                    listModelo.Add(modelo);
                }

                return listModelo;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<FrotaModelo> SelectModelos(int _idfabricante, int[] _excecaoidmodelo)
        {
            try
            {
                List<FrotaModelo> listModelo = new List<FrotaModelo>();

                var consultaExcecao = (from modelo in _context.tab_frota_modelo.Where((BuildContainsExpression<tab_frota_modelo, int>(item => item.id_frota_modelo, _excecaoidmodelo)))
                                       select modelo);

                var consulta = (from modelo in _context.tab_frota_modelo.Except(consultaExcecao)
                                where modelo.tab_frota_fabricante.id_frota_fabricante == _idfabricante
                                select new
                                {
                                    modelo.id_frota_modelo,
                                    modelo.descricao
                                });

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    FrotaModelo modelo = new FrotaModelo();
                    modelo.IdFrotaModelo = list.id_frota_modelo;
                    modelo.Descricao = list.descricao;

                    listModelo.Add(modelo);
                }

                return listModelo;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public DataTable SelectModelos(int[] _idfabricante, int[] _idmodelo, int[] _idclassificacao)
        {
            try
            {
                gradeVeiculos = new DataTable();

                if (_idfabricante.Count() == 0)
                    throw new Exception("É necessário selecionar ao menos um fabricante para efetuar a pesquisa!");

                if (_idmodelo.Count() == 0)
                    throw new Exception("É necessário selecionar ao menos um veículo para efetuar a pesquisa!");

                if (_idclassificacao.Count() == 0)
                    throw new Exception("É necessário selecionar ao menos uma classificação parea efetuar a pesquisa!");

                EstruturaExibirGradeVeiculos();

                var consulta = (from modelo in _context.tab_frota_modelo.Where((BuildContainsExpression<tab_frota_modelo, int>(item => item.id_frota_modelo, _idmodelo)))
                                join fabricante in _context.tab_frota_fabricante.Where((BuildContainsExpression<tab_frota_fabricante, int>(item => item.id_frota_fabricante, _idfabricante))) on modelo.tab_frota_fabricante.id_frota_fabricante equals fabricante.id_frota_fabricante
                                join classificacao in _context.tab_frota_modelo_classificacao.Where((BuildContainsExpression<tab_frota_modelo_classificacao, int>(item => item.id_frota_modelo_classificacao, _idclassificacao))) on modelo.tab_frota_modelo_classificacao.id_frota_modelo_classificacao equals classificacao.id_frota_modelo_classificacao
                                select new
                                {
                                    modelo.id_frota_modelo,
                                    modelo.tab_frota_fabricante.id_frota_fabricante,
                                    modelo.descricao,
                                    modelo.tab_frota_modelo_classificacao.id_frota_modelo_classificacao
                                });

                var listConsulta = consulta.ToList();

                DataRow registro;
                foreach (var list in listConsulta)
                {
                    FrotaModelo modelo = new FrotaModelo();

                    modelo.IdFrotaModelo = list.id_frota_modelo;
                    modelo.Fabricante = new FrotaFabricante(list.id_frota_fabricante, true);
                    modelo.Descricao = list.descricao;
                    modelo.Classificacao = new FrotaModeloClassificacao(list.id_frota_modelo_classificacao, true);

                    CategoriaCNH categoria = new CategoriaCNH();
                    modelo.CategoriaCNH = categoria.SelectVeiculoCNH(list.id_frota_modelo);

                    if (modelo.CategoriaCNH.Count == 0)
                        modelo.Classificacao.CategoriaCNH = categoria.SelectClassificacaoCNH(list.id_frota_modelo_classificacao);

                    registro = gradeVeiculos.NewRow();

                    registro["IdFrotaModelo"] = list.id_frota_modelo;
                    registro["Fabricante"] = modelo.Fabricante.Descricao;
                    registro["Veiculo"]= modelo.Descricao;
                    registro["Classificacao"] = modelo.Classificacao.Descricao;

                    registro["Categorias"] = "";
                    if (modelo.CategoriaCNH.Count > 0)
                    {
                        for (int i = 0; i < modelo.CategoriaCNH.Count; i++)
                        {
                            registro["Categorias"] += string.Concat(", ", modelo.CategoriaCNH[i].Categoria);
                        }
                    }
                    else if (modelo.Classificacao.CategoriaCNH.Count > 0)
                    {
                        for (int i = 0; i < modelo.Classificacao.CategoriaCNH.Count; i++)
                        {
                            registro["Categorias"] += string.Concat(", ", modelo.Classificacao.CategoriaCNH[i].Categoria);
                        }
                    }

                    if (registro["Categorias"].ToString() != string.Empty)
                        registro["Categorias"] = registro["Categorias"].ToString().Substring(registro["Categorias"].ToString().IndexOf(",", 0) + 1).Trim();

                    gradeVeiculos.Rows.Add(registro);
                }

                return gradeVeiculos;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<FrotaModelo> SelectModelos(string _descricao)
        {
            try
            {
                List<FrotaModelo> listModelos = new List<FrotaModelo>();

                var consulta = (from modelo in _context.tab_frota_modelo
                                where (_descricao != string.Empty) ? modelo.descricao.Contains(_descricao) : (1 == 1)
                                select new
                                {
                                    modelo.id_frota_modelo,
                                    modelo.descricao
                                });

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    FrotaModelo modelo = new FrotaModelo();
                    modelo.IdFrotaModelo = list.id_frota_modelo;
                    modelo.Descricao = list.descricao;

                    listModelos.Add(modelo);
                }

                return listModelos;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public int SelectQtdeModelos(int _idclassificacao)
        {
            try
            {
                int qtde = 0;

                var consulta = (from modelo in _context.tab_frota_modelo
                                where modelo.tab_frota_modelo_classificacao.id_frota_modelo_classificacao == _idclassificacao
                                select new
                                {
                                    modelo.id_frota_modelo,
                                    modelo.descricao
                                });

                qtde = consulta.ToList().Count;

                return qtde;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<FrotaFabricante> CarregarComboFabricantes()
        {
            try
            {
                List<FrotaFabricante> listFabricante = new List<FrotaFabricante>();

                var consulta = (from fabricante in _context.tab_frota_fabricante
                                join modelo in _context.tab_frota_modelo on fabricante.id_frota_fabricante equals modelo.tab_frota_fabricante.id_frota_fabricante
                                select fabricante).Distinct();

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    FrotaFabricante fabricante = new FrotaFabricante();
                    fabricante.IdFrotaFabricante = list.id_frota_fabricante;
                    fabricante.Descricao = list.descricao;

                    listFabricante.Add(fabricante);
                }

                return listFabricante;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<FrotaModelo> CarregarComboVeiculos(int[] _idfabricante)
        {
            try
            {
                List<FrotaModelo> listModelo = new List<FrotaModelo>();

                if (_idfabricante.Count() == 0)
                    throw new Exception("É necessário informar ao menos um fabricante para buscar os veículos!");

                var consulta = (from modelo in _context.tab_frota_modelo
                                join fabricante in _context.tab_frota_fabricante.Where((BuildContainsExpression<tab_frota_fabricante, int>(item => item.id_frota_fabricante, _idfabricante))) on modelo.tab_frota_fabricante.id_frota_fabricante equals fabricante.id_frota_fabricante
                                select new
                                {
                                    modelo.id_frota_modelo,
                                    modelo.descricao
                                });

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    FrotaModelo modelo = new FrotaModelo();
                    modelo.IdFrotaModelo = list.id_frota_modelo;
                    modelo.Descricao = list.descricao;

                    listModelo.Add(modelo);
                }

                return listModelo;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<FrotaModeloClassificacao> CarregarComboClassificacao(int[] _idmodelo)
        {
            try
            {
                List<FrotaModeloClassificacao> listClassificacao = new List<FrotaModeloClassificacao>();

                if (_idmodelo.Count() == 0)
                    throw new Exception("É necessário informar ao menos um veículo para buscar as classificações!");

                var consulta = (from classificacao in _context.tab_frota_modelo_classificacao
                                join modelo in _context.tab_frota_modelo.Where((BuildContainsExpression<tab_frota_modelo, int>(item => item.id_frota_modelo, _idmodelo))) on classificacao.id_frota_modelo_classificacao equals modelo.tab_frota_modelo_classificacao.id_frota_modelo_classificacao
                                select classificacao).Distinct();

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    FrotaModeloClassificacao classificacao = new FrotaModeloClassificacao();
                    classificacao.IdFrotaModeloClassificacao = list.id_frota_modelo_classificacao;
                    classificacao.Descricao = list.descricao;

                    listClassificacao.Add(classificacao);
                }

                return listClassificacao;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<FrotaModelo> SelectModelosRegraContrato(int _idregracontrato)
        {
            try
            {
                List<FrotaModelo> listModelos = new List<FrotaModelo>();

                var consulta = (from modelo in _context.tab_frota_regra_contrato_frota_modelo
                                where modelo.tab_frota_regra_contrato.id_frota_regra_contrato == _idregracontrato
                                select new
                                {
                                    modelo.tab_frota_modelo.id_frota_modelo,
                                    modelo.tab_frota_modelo.tab_frota_fabricante.id_frota_fabricante,
                                    modelo.tab_frota_modelo.descricao
                                });

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    FrotaModelo modelo = new FrotaModelo();
                    modelo.IdFrotaModelo = list.id_frota_modelo;
                    modelo.Fabricante = new FrotaFabricante(list.id_frota_fabricante, true);
                    modelo.Descricao = list.descricao;

                    listModelos.Add(modelo);
                }

                return listModelos;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Métodos de Persistência
        public void Salvar()
        {
            using (TransactionScope scope = new TransactionScope())
            {
                try
                {
                    if (VerificaCadastro())
                    {
                        if (this._idFrotaModelo == 0)
                        {
                            tab_frota_modelo tabModelo = new tab_frota_modelo();
                            tabModelo.tab_frota_fabricanteReference.EntityKey = new EntityKey("GENTEEntities.tab_frota_fabricante", "id_frota_fabricante", this._fabricante.IdFrotaFabricante);
                            tabModelo.descricao = this._descricao;
                            tabModelo.tab_frota_modelo_classificacaoReference.EntityKey = new EntityKey("GENTEEntities.tab_frota_modelo_classificacao", "id_frota_modelo_classificacao", this._classificacao.IdFrotaModeloClassificacao);

                            _context.AddTotab_frota_modelo(tabModelo);
                            _context.SaveChanges();

                            this._idFrotaModelo = RetornaIdModelo();

                            SalvarModeloCategorias();
                        }
                        else
                        {
                            tab_frota_modelo tabModelo = (from modelo in _context.tab_frota_modelo
                                                          where modelo.id_frota_modelo == this._idFrotaModelo
                                                          select modelo).First();

                            tabModelo.tab_frota_fabricanteReference.EntityKey = new EntityKey("GENTEEntities.tab_frota_fabricante", "id_frota_fabricante", this._fabricante.IdFrotaFabricante);
                            tabModelo.descricao = this._descricao;
                            tabModelo.tab_frota_modelo_classificacaoReference.EntityKey = new EntityKey("GENTEEntities.tab_frota_modelo_classificacao", "id_frota_modelo_classificacao", this._classificacao.IdFrotaModeloClassificacao);

                            _context.SaveChanges();

                            ExcluirModeloCategorias();
                            SalvarModeloCategorias();
                        }
                    }

                    scope.Complete();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }

        public void Excluir()
        {
            using (TransactionScope scope = new TransactionScope())
            {
                try
                {
                    FrotaRegraContrato regracontrato = new FrotaRegraContrato();
                    this._regraContrato = regracontrato.SelectPor(this._idFrotaModelo);

                    if (this._regraContrato.Count > 0)
                        throw new Exception("Este veículo possui contrato(s) relacionado(s), desta forma, não pode ser realizado a exclusão. Operação cancelada!");

                    CategoriaCNH categoria = new CategoriaCNH();
                    categoria.Excluir(this._idFrotaModelo);

                    var consulta = (from modelo in _context.tab_frota_modelo
                                    where modelo.id_frota_modelo == this._idFrotaModelo
                                    select modelo);

                    var listConsulta = consulta.ToList();

                    foreach (var list in listConsulta)
                    {
                        _context.DeleteObject(list);
                        _context.SaveChanges();
                    }

                    scope.Complete();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
        #endregion

        #endregion
    }
}
